#ifndef __BUOLA_GUI_X11_CX11COLOR_H__
#define __BUOLA_GUI_X11_CX11COLOR_H__

#include <buola/gui/x11/auto.h>
#include <buola/image/ccolor.h>
#include <X11/Xlib.h>
#include <X11/Xft/Xft.h>
#include <unordered_map>

namespace buola { namespace gui { namespace x11 {

class CX11Color
{
    enum EValid
    {
        VALID_NONE=0,
        VALID_XFT=(1<<0),
        VALID_CCOLOR=(1<<1),
        VALID_X=(1<<2),
        VALID_RENDER=(1<<3)
    };

    DECLARE_FRIEND_ENUM_BITOPS(EValid)

public:
    CX11Color(const img::CColor &pColor)
        :   mValid(VALID_NONE),
            mColor(pColor)
    {
    }

    const XColor& GetXColor();
    XftColor* GetXftColor();
    XRenderColor* GetRenderColor();

    static CX11Color *GetX11Color(const img::CColor&);

public:
    EValid mValid;

    XRenderColor mRender;
    XftColor mXft;
    XColor mX;

    img::CColor mColor;

    static std::unordered_map<img::CColor,CX11Color*> mX11Colors;
};

/*namespace x11*/ } /*namespace gui*/ } /*namespace buola*/ }

#endif
